package com.gigi.datageniebackendmaster.mq;

import com.rabbitmq.client.Channel;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Component;

/**
 * 消费者代码
 */
@Component
@Slf4j
public class MyMessageConsumer {

    /**
     * 消费者接收消息
     *
     * @param message 接收到的消息
     * @param channel 消息通道
     * @param deliveryTag 消息标签
     */
    @SneakyThrows // 防止出现未捕获异常导致程序崩溃
    @RabbitListener(queues = {"code_queue"}, ackMode = "MANUAL") // 监听队列名为 code_queue 的消息, ackMode 设置为 MANUAL 手动确认
    public void receiveMessage(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) {
        log.info("receiveMessage message = {}", message);
        // 消息确认ack，multiAck=false表示一次确认一个消息，true表示一次确认所有消息
        channel.basicAck(deliveryTag, false);
    }

}
